package cn.jwt.domain;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serializable;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class ResponseResult implements Serializable {


    private static final long serialVersionUID = 4633451373316892528L;

    // 响应业务状态
    public int status = 200;

    //权限不足
    public static final int FORBIDDEN=403;

    //认证失败
    public static final int UNAUTHORIZED=403;


    // 响应消息
    public String msg = "操作成功";

    // 响应数据
    public Object data = null;

    /**
     *
     * <p>
     * Title: 响应失败
     * </p>
     *
     * @return ResponseResult
     */
    public static ResponseResult fail() {
        return fail("操作失败");
    }

    /**
     *
     * <p>
     * Title: 响应失败，但是自定义响应消息l
     * </p>
     *
     * @param msg 需要自定义的响应消息
     * @return ResponseResult
     */
    public static ResponseResult fail(String msg) {
        return bulid(500, msg, null);
    }

    /**
     *
     * <p>
     * Title: 响应失败，但是自定义响应消息l
     * </p>
     *
     * @param msg 需要自定义的响应消息
     * @return ResponseResult
     */
    public static ResponseResult fail(int status,String msg) {
        return new ResponseResult(status, msg);
    }

    /**
     *
     * <p>
     * Title: 成功并且传递数据，并且自定义响应消息内容
     * </p>
     *
     * @param msg  响应消息内容
     * @param data 响应数据
     * @return ResponseResult
     */
    public static ResponseResult ok(String msg, Object data) {
        return bulid(200, msg, data);
    }

    /**
     *
     * <p>
     * Title: 成功并且传递数据，但是不自定义消息
     * </p>
     *
     * @param data 需要传递的数据
     * @return ResponseResult
     */
    public static ResponseResult ok(Object data) {
        return ok("操作成功", data);
    }

    /**
     *
     * <p>
     * Title: 成功，不传递信息，也不自定义信息
     * </p>
     *
     * @return ResponseResult
     */
    public static ResponseResult ok() {
        return ok("操作成功", null);
    }

    /**
     * '
     *
     * <p>
     * Title: 成功，不传递数据，但是需要自定响应消息
     * </p>
     *
     * @param msg 需要自定义的响应消息
     * @return ResponseResult
     */
    public static ResponseResult ok(String msg) {
        return ok(msg, null);
    }

    /**
     *
     * <p>
     * Title: 自定义响应结构
     * </p>
     *
     * @param status 响应状态
     * @param msg    响应消息
     * @param data   响应数据
     * @return ResponseResult
     */
    public static ResponseResult bulid(int status, String msg, Object data) {
        return new ResponseResult(status, msg, data);
    }

    public ResponseResult(int status, String msg) {
        this.status = status;
        this.msg = msg;
    }
}